package abstract

// 具体产品

type Brand int

const (
	NikeBrand   = Brand(0)
	AdidasBrand = Brand(1)
)

type Nike struct {
}

type NikeShirt struct {
	Shirt
}
type NikeShoe struct {
	Shoe
}

func (n *Nike) MakeShoe() IShoe {
	return &NikeShoe{
		Shoe: Shoe{
			Logo: "nike",
			Size: 14,
		},
	}
}

func (n *Nike) MakeShirt() IShirt {
	return &NikeShirt{
		Shirt: Shirt{
			Logo: "nike",
			Size: 14,
		},
	}
}

// =========
type Adidas struct {
}
type AdidasShoe struct {
	Shoe
}
type AdidasShirt struct {
	Shirt
}

func (a *Adidas) MakeShoe() IShoe {
	return &AdidasShoe{
		Shoe: Shoe{
			Logo: "adidas",
			Size: 10,
		},
	}
}

func (a *Adidas) MakeShirt() IShirt {
	return &AdidasShirt{
		Shirt: Shirt{
			Logo: "adidas",
			Size: 10,
		},
	}
}
